As technology advances, computing systems have become increasingly powerful in terms of computation power. Correspondingly, the power requirements have increased rapidly. As a result, virtualization of computers and/or operating systems has become increasingly important to enable server consolidation such that many small physical servers can be replaced by one larger physical server. This results in increased and more efficient utilization of costly hardware resources such as central processing units (CPUs), thereby allowing power savings and hardware cost savings.
Virtual environments typically include virtualized computers and/or operating systems known as virtual machines or guests which access hardware or physical resources through emulated devices presented by a hypervisor. Hypervisor based virtualization is becoming increasingly important in data centers and furthermore hypervisor based computing is displacing many native platform applications. However, hypervisor based virtual environments are often rendered less effective by the primitive emulated devices provided by the hypervisors. Particularly, the hypervisor vendors are not sufficiently motivated to make the proper interfaces available to allow proper porting of products to a hypervisor based virtualization environment. The lack of supporting interfaces prevents hypervisor based implementations from delivering performance at optimum levels.
In addition, solutions attempting to use device drivers on top of the existing hypervisor infrastructure require custom implementations of interfaces to hypervisor internal interfaces. Also, within these systems, the performance of working through an emulated device layered software stack is significantly degraded and the system resource overhead is greatly increased. Consequently, the cumulative demand on shared hardware resources by multiple guests makes response time and throughput largely indeterminate.
Further, current hypervisors expose device specific characteristics to virtual machines which make virtual machine migration difficult. Virtual machines are designed to be portable. Virtual machines can be moved or migrated between platforms and therefore the resources that underlie the emulated devices of the hypervisors can vary. Modern hypervisors have incomplete abstractions defining the resources that are needed to construct the emulated devices presented to the virtual machines. As a result, individual physical resource characteristics creep into the implementations of emulated devices. This leads to difficulties in substituting one physical resource for another, during virtual machine migration, without affecting the capabilities of the emulated device presented to the virtual machine guest. As such, each resource difference is handled individually. The results are hard to maintain code, little code re-use, and difficulty in maintaining common functions and metrics across the disparate implementations. This means that often the guest driver must be changed after migration or that the transport channel is sub-optimal in performance.
Often, hypervisor vendors try to overcome their device model shortcomings by limiting the number of device emulations, relying on internet protocol (IP) network abstraction to supply storage as well as network communication to the virtual machine. This is not optimal because packet networking is not the optimal transport abstraction for internal use and limitations of device types exported to a virtual machine slow the adoption of the virtualization platform.